/* 学习目标：泛型函数  */
// 作用： 提高类型（函数类型）的可复用性
// 语法： function xxx<T>(形参： T): T {}
// 调用：
//    1. 简写： xxx(值)
//    2. 完整： xxx<类型>(值)

// 创建泛型函数
function fn<T>(a: T): T {
  return a;
}

// 泛型函数调用 - 简写👍
fn("123");
fn(2).toFixed(2);
fn([]);

type User = {
  name: string;
  age: number;
  gender?: string;
  sex?: string;
};

// 泛型函数调用 - 完整
// 场景：当类型推断不准确的时候
// ❌ 此时无法推断出有可选属性
// ❌ const user = fn({ name: 'zs', age: 18 })

// ✅
const user = fn<User>({ name: "zs", age: 18 });
if (user) {
  user.gender = "男";
}
